package com.baixun.gassystem.springsecurity;

import com.baixun.gasentity.entity.SysUser;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import java.util.Collection;
import java.util.List;


/**
 * 自定义用户认证类
 */

@Data
public class MyUserDetails implements UserDetails {

    private SysUser sysUser;

    private List<SimpleGrantedAuthority> simpleGrantedAuthority;

    /**
     * 返回用户拥有的权限集合
     *
     * @return 用户权限集合，类型为Collection的子类型，元素类型为GrantedAuthority
     */
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return simpleGrantedAuthority;
    }

    @Override
    public String getPassword() {
        return null;
    }

    /**
     * 构造函数，用于初始化MyUserDetails对象
     *
     * @param sysUser 系统用户对象，用于创建MyUserDetails实例
     */
    public MyUserDetails(SysUser sysUser){
        this.sysUser=sysUser;
    }

    /**
     * 获取系统用户信息
     *
     * @return 系统用户对象SysUser
     */
    public SysUser getSysUser(){
        return this.sysUser;
    }

    /**
     * 获取用户密码，经过BCrypt算法加密
     *
     * @return 加密后的用户密码字符串
     */
//    @Override
//    public String getPassword() {
//        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
//        return bCryptPasswordEncoder.encode(sysUser.getPassWord());
//    }


    /**
     * 获取用户用户名
     *
     * @return 用户名
     */
    @Override
    public String getUsername() {
        return sysUser.getUserName();
    }

    /**
     * 判断用户账户是否未过期
     *
     * @return 总是返回true，表示账户永不过期
     */
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 判断用户账户是否未锁定
     *
     * @return 总是返回true，表示账户永远不锁定
     */
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 判断用户的凭证是否未过期
     *
     * @return 总是返回true，表示凭证永不过期
     */
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 判断用户是否启用
     *
     * @return 总是返回true，表示用户始终启用
     */
    @Override
    public boolean isEnabled() {
        return true;
    }
}
